package utils;

/**
 * @ClassName: ResultData
 * @Description:
 * @Author: olj
 * @Date:
 * @Version: V1.0
 */
public class ResultData<T> {

    //像这种状态信息，有多个时，我们可以封装一个枚举类
    private static final int SUCCESS = 0; //表示操作成功
    private static final int FAIL = 1; //表示操作失败

    /**
     * 响应状态码：
     *      比如 404 、400 、500
     *      以及自定义的一些状态码信息
     */
    private int code;

    /**
     * 响应提示信息：
     *      如操作成功、操作失败、暂无权限等
     */
    private String msg;

    /**
     * 响应给前端的数据集
     *      比如： 用户信息、商品信息、商品列表等
     */
    private T Data;


    private  Long count;

    public ResultData(int code, String msg, T data, Long count) {
        this.code = code;
        this.msg = msg;
        Data = data;
        this.count = count;
    }

    public ResultData() {

    }

    public ResultData(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        Data = data;
    }

    /**
     * 操作成功，并且没有数据返回时，可以使用此静态方法
     */
    public static ResultData success(){
        return new ResultData(SUCCESS,"操作成功",null);
    }

    /**
     * 操作失败，并且没有数据返回时，可以使用此静态方法
     */
    public static ResultData fail(){

        return new ResultData(FAIL,"操作失败",null);
    }


    /**
     *  自定义状态码和返回信息时调用
     */
    public static ResultData buildMsg(int code, String msg)
    {
        return new ResultData(code,msg,null);
    }

    /**
     * 操作成功，且有数据返回时
     */
    public static <T> ResultData buildData(T data){
        return new ResultData(SUCCESS,"操作成功",data);
    }


    public static <T> ResultData page(T data, Long count){
        return new ResultData(SUCCESS,"操作成功",data,count);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return Data;
    }

    public void setData(T data) {
        Data = data;
    }

    public Long getCount() {
        return count;
    }

    public void setCount(Long count) {
        this.count = count;
    }
}
